/**
 * fshows.com
 * Copyright (C) 2013-2020 All Rights Reserved.
 */
package com.fshows.leshuapay.sdk.request.pay;

import lombok.Data;
import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
import org.apache.commons.lang3.builder.ToStringStyle;

import jakarta.validation.constraints.NotBlank;

/**
 * 统一下单（主扫：C扫B）request
 *
 * @author zhaoyi
 * @version LeshuaBasePayRequest.java, v 0.1 2020-07-28 10:50 zhaoyi
 */
@Data
public class LeshuaQrAndJsPayRequest extends LeshuaBasePayRequest {

    private static final long serialVersionUID = -6806564122995030613L;

    /**
     * 接口名
     * 固定值
     */
    private String service = "get_tdcode";

    /**
     * 支付类型
     **/
    @NotBlank(message = "payWay不能为空")
    private String payWay;

    /**
     * 商户号
     * 由乐刷分配
     */
    @NotBlank(message = "merchantId不能为空")
    private String merchantId;

    /**
     * 商户订单号
     * 商户内部订单号，可以包含字母：确保同一个商户下唯一
     */
    @NotBlank(message = "thirdOrderId不能为空")
    private String thirdOrderId;

    /**
     * 订单金额，以分为单位
     * 总金额（金额不能为零或负数）
     **/
    @NotBlank(message = "amount不能为空")
    private String amount;

    /**
     * 支付宝smid和微信sub_mch_id
     **/
    private String assMerchantId;

    /**
     * 支付类型
     * 0-支付宝扫码支付、银联二维码扫码支付
     * 1-微信公众号、支付宝服务窗支付<原生支付>、银联js支付
     * 2-微信公众号、支付宝服务窗支付<简易支付>
     * 3-微信小程序支付、支付宝小程序支付
     **/
    @NotBlank(message = "jspayFlag不能为空")
    private String jspayFlag;

    /**
     * 公众号appid
     * 微信公众号ID ；微信公众号支付的公众号id。选填，如果传了会使用此appid 进行下单；没传使用商户进件时最新配置的 appid
     */
    private String appid;

    /**
     * 用户子标识
     * 微信公众号、小程序、支付宝服务窗、支付宝小程序、银联JS支付必填
     **/
    private String subOpenid;

    /**
     * 业务拓展参数
     * 当前可透传支付宝扫码点餐的参数，business_params、goods_detail、extend_params
     */
    private String extendBusinessParams;

    /**
     * 支付宝业务透传扩展参数
     *
     * 有新字段更新，按如下处理
     * 新增参数集【extend_business_params_v1】专用于透传支付宝业务字段（json字符串格式），其他非json字符串数据还是用原【extend_business_params】透传。
     * extend_business_params_v1={"business_params":{},"extend_params":{}}
     * 注意：官方文档业务字段在business_params下的，就放在对应的key里面，extend_params下的也放到对应的key。
     * 举例：amount=29000&jspay_flag=0&merchant_id=9540015057&nonce_str=6IMYCeyZ&pay_way=ZFBZF&service=get_tdcode&third_order_id=928815192575&sign=AFF881C659FA05985018E0C6A5F4FC0B&extend_business_params_v1={"business_params":{"payOperationInfo":"{\"payOperationId\":\"20250402102021016fc4ab000YNN8405\",\"installmentCount\":\"3\",\"head_node_itemId\":\"24072310532988\",\"head_node_sceneCode\":\"merchantPreAlicreditFQG\"}","preConsultId":"20250402102021016fc4ab000YNN8405"}}&hb_fq_num=3
     */
    private String extendBusinessParamsV1;

    /**
     * 前台跳转地址
     * 简易支付时必填：支付完成后，乐刷将跳转到该页面，需做UrlEncode 处理
     */
    private String jumpUrl;

    /**
     * 通知地址
     * 接收乐刷通知（支付结果通知）的URL，需做UrlEncode 处理，需要绝对路径，确保乐刷能正确访问，若不需要回调请忽略
     **/
    private String notifyUrl;

    /**
     * 用户IP地址
     * 商户发起交易的IP地址
     **/
    private String clientIp;

    /**
     * 商品描述，不能包含回车换行等特殊字符
     */
    private String body;

    /**
     * 0或不传，d1交易 1-d0交易
     **/
    private String t0;


    /**
     * 商户门店编号
     */
    private String shopNo;

    /**
     * 商户终端编号
     * 只能是汉字、英文字母、数字
     */
    private String posNo;

    /**
     * 附加数据
     * 下单成功原样返回；注意：只能是汉字、英文字母、数字
     */
    private String attach;

    /**
     * 指定支付方式
     * 1：禁止使用信用卡；0或者不填：不限制
     */
    private String limitPay;

    /**
     * 订单优惠标记，透传给微信
     */
    private String goodsTag;

    /**
     * 商品详情
     * 按微信单品优惠券格式传递透传给微信;请做UrlEncode
     */
    private String goodsDetail;

    /**
     * 订单有效时间
     * 单位：秒（支付宝的超时时间最小粒度为分钟，建议上送的为60的整数倍）
     */
    private String orderExpiration;

    /**
     * 支付宝花呗分期数，支持3、6、12期
     */
    private String hbFqNum;

    /**
     * 前端跳转地址
     * 银联JS支付时选填，支付成功时跳转
     */
    private String frontUrl;

    /**
     * 支付失败前端跳转地址
     * 银联JS支付时选填，支付失败时跳转
     */
    private String frontFailUrl;

    /**
     * 设备编号
     * 针对微信、支付宝有效，透传至银联。微信：数字、字母、下划线格式. 支付宝：目前支持非0开头的数字
     */
    private String deviceInfo;

    /**
     * 交易分账标识
     * 需分账：1
     * 不分账：0
     */
    private String royalty = "0";

    /**
     * 银联服务商标识
     */
    private String pnrinsIdCd;

    /**
     * 平台方门店号（即微信/支付宝的storeid）
     */
    private String storeId;

    /**
     * 该字段用于上报场景信息，仅针对微信交易有效，目前支持上报实际门店信息。
     * 该字段 为JSON格式的字符串，对象格式为{"store_info":{"id": "门店 ID","name ": "名称","area_code": "编码","address": "地址"}}
     * 字段详细说明参考下文。
     **/
    private String sceneInfo;

    /**
     * 扫码进入的二维码地址，如码牌地址
     * 合法形式为http/https地址，从2024年二季度开始管控，具体以乐刷发的通知为准
     **/
    private String qrcodeUrl;

    /**
     * 用户前端跳转银联地址返回的用户授权码
     * 用户授权码获取方法见文档 ，从2024年二季度开始管控，具体以乐刷发的通知为准
     **/
    private String userAuthcode;

    /**
     * App支付标识
     * 当接入云梯计划时，传入MicroMessenger。其他时候不用传
     **/
    private String appUpIdentifier ;

    @Override
    public String toString() {
        return ReflectionToStringBuilder.reflectionToString(this,
                ToStringStyle.SHORT_PREFIX_STYLE);
    }
}
